package dao.impl;

import dao.GerenteDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.ArrayList;
import java.util.List;
import modelo.Gerente;

public class MemoryGerenteDAO implements GerenteDAO {

    private ArrayList<Gerente> lista;
    private long seq;

    public MemoryGerenteDAO() {
        lista = new ArrayList<Gerente>();
        seq = 0;
    }

    public void inclui(Gerente umGerente) throws ObjetoDuplicadoException {

        for (Gerente gerente : lista) {
            if (gerente.igual(gerente)) {
                throw new ObjetoDuplicadoException();
            }
        }
        umGerente.setId(++seq);
        lista.add(umGerente);
    }

    public void altera(Gerente umGerente) throws ObjetoNaoEncontradoException {
        boolean achou = false;

        for (Gerente gerente : lista) {
            if (gerente.igual(umGerente)) {
                umGerente.setId(gerente.getId());
                lista.remove(gerente);
                lista.add(umGerente);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }
    }

    public void exclui(Gerente umGerente) throws ObjetoNaoEncontradoException {
        if (!lista.remove(umGerente)) {
            throw new ObjetoNaoEncontradoException();
        }
    }

    public Gerente recuperaUmGerente(long id) throws ObjetoNaoEncontradoException {
        Gerente umGerente = new Gerente();
        umGerente.setId(id);
        for (Gerente gerente : lista) {
            if (gerente.igual(umGerente)) {
                return gerente;
            }
        }

        throw new ObjetoNaoEncontradoException();
    }

    public List<Gerente> recuperaGerentes() {
        return lista;
    }

}
